Provisional selection drives edit suggestion generation

ABSTRACT

Edit automation enhancements may be implemented in source code editors and other text editors. Provisional selections that indicate user intentions are submitted to a suggestion generator with other edit context information, to improve the quality of generated text suggestions and reduce the cognitive load on users. A provisional selection may include a highlighted completion list entry, or document text targeted by a hovering cursor, or metainformation text targeted by the hovering cursor, for example. An inline grey text suggestion driven by provisional selection may be displayed simultaneously with completion list suggestions that were created without regard to provisional selection. Suggestions driven by provisional selection may be interleaved with existing document text. Suggestions may be accepted fully in one gesture, or in parts. Suggestions may be edited by a user before being accepted, driving further suggestion refinement. Multiple suggestions may be displayed simultaneously, reducing pressure on the suggestion generator.

RELATED APPLICATION

The present application claims priority to, and incorporates byreference the entirety of, U.S. patent application Ser. No. 17/237,936filed 22 Apr. 2021.

BACKGROUND

Programs for creating, modifying, or otherwise editing documents wereamong the first software tools created, and such editors have undergonemany changes over time, including many improvements. Some editing toolsaccept input not only in the form of characters typed on a keyboard, butalso in the form of data sent from a mouse, pen, touch pad, touchscreen, microphone, or other device. Some permit a user to define asequence of keys as a macro, allowing the user to easily repeat acommand sequence. Many editors provide a WYSIWYG (what you see is whatyou get) user experience, so that an appearance of a document onscreenin the editor closely resembles a result of printing the document. Someediting tools support multiple windows, to assist a user who iscontemporaneously editing multiple files or editing different parts of agiven file, or both. Some editors support integration of graphic imagesinto a document, or provide a user with access to graphics editing toolswithin a document editing session.

The range of “text” operated upon by an editor was originally limitedmostly to alphabet letters, numbers, and punctuation. But over time, thetext one can edit with a program has expanded to include at leastmathematical symbols, geometric shapes, music and other notationalsystems, logographic and syllabic scripts, and many other writtensymbols. As of the present time, the Unicode® technology standard forencoding, representing, and handling text covers over 150 modern andhistoric scripts, including over 140,000 characters (mark of Unicode,Inc.).

Some editors are specialized for particular knowledge areas or fields ofpractice, such as video editing, sound editing, or software source codeediting. In particular, some source code editors provide integratedfunctionality for syntax checking, autocompletion, indentation, bracematching, and easy access to a compiler, interpreter, or debugger.

Despite these advancements, improvements are still possible in the fieldof tools for editing source code or other documents that contain text.

SUMMARY

Some embodiments described herein use provisional selections to driveautomatic generation of edit suggestions during an editing session. As asoftware developer or other editor user provisionally selects differententries shown in a completion list, or provisionally selects other text,the provisional selection serves as an input to a model thatautomatically generates edit suggestions.

Thus, an enhanced editor tool may offer more suggestions than only thecompletion list entries. More focused editing suggestions may begenerated automatically. Suggestion generation may be based not only onstatic analysis and on particular text near a current insertion point inthe document, but also be based on which completion list entry or otherdisplayed text is provisionally selected by the user and thus presumedrelevant.

Some embodiments described herein use or provide a hardware and softwarecombination which is configured for edit automation. The combinationincludes a digital memory, and a processor which is in operablecommunication with the memory. The processor is configured, e.g., bytailored editor software, to perform edit automation steps, whichinclude submitting edit context information—including a provisionalselection—to a suggestion generation model, getting from the suggestiongeneration model a text suggestion which is based at least in part onthe provisional selection, and displaying the text suggestion near thetext insertion point. Edit automation method embodiments and configuredstorage device embodiments are also described herein.

Other technical activities and characteristics pertinent to teachingsherein will also become apparent to those of skill in the art. Theexamples given are merely illustrative. This Summary is not intended toidentify key features or essential features of the claimed subjectmatter, nor is it intended to be used to limit the scope of the claimedsubject matter. Rather, this Summary is provided to introduce—in asimplified form—some technical concepts that are further described belowin the Detailed Description. The innovation is defined with claims asproperly understood, and to the extent this Summary conflicts with theclaims, the claims should prevail.

DESCRIPTION OF THE DRAWINGS

A more particular description will be given with reference to theattached drawings. These drawings only illustrate selected aspects andthus do not fully determine coverage or scope.

FIG. 1 is a block diagram illustrating computer systems generally andalso illustrating configured storage media generally;

FIG. 2 is a block diagram illustrating aspects of a computing systemwhich has one or more of the edit automation enhancements taught herein;

FIG. 3 is a block diagram illustrating some examples and some aspects ofsome automatically generated text editing suggestions;

FIG. 4 shows a stylized user interface containing document text that isrepresented in the Figures by line segments;

FIG. 5 shows the document text and user interface of FIG. 4 , with acompletion list displayed to assist editing at a text insertion point;

FIG. 6 shows the document text and user interface of FIG. 5 , with anentry of the completion list provisionally selected and a correspondingsuggestion text displayed;

FIG. 7 shows the document text and user interface of FIG. 6 , with adifferent entry of the completion list provisionally selected and acorresponding different suggestion text displayed;

FIG. 8 shows the document text and user interface of FIG. 7 , after theprovisional selection was accepted and the corresponding differentsuggestion text was placed in the document text;

FIG. 9 shows the document text and user interface of FIG. 7 in analternative configuration, with a cursor hovering over a target portionof the document text and a suggestion text that corresponds to thetarget portion being displayed at the text insertion point;

FIG. 10 shows the document text and user interface of FIG. 4 , withanother completion list and a multi-part suggestion text displayed;

FIG. 11 shows the document text and user interface of FIG. 7 , with thecompletion list modified and with a part but not all of the suggestiontext committed;

FIG. 12 is a block diagram illustrating some aspects of some editors oruser interfaces or both;

FIG. 13 is a flowchart illustrating steps in some edit automationmethods; and

FIG. 14 is a flowchart further illustrating steps in some methods foredit automation, incorporating FIG. 13 and steps illustrated by FIGS. 4to 11 .

DETAILED DESCRIPTION

Overview

Innovations may expand beyond their origins, but understanding aninnovation's origins can help one more fully appreciate the innovation.In the present case, some teachings described herein were motivated byMicrosoft innovators who recognized and faced technical challengesarising from their efforts to make source code editors more effectiveand easier to use.

Some source code editors provide users with an autocompletionfunctionality that provides a completion list with entries the user canchoose from, so that with a single gesture the user can insert a stringof characters into a text document. Autocompletion can reduce the numberof keystrokes made, and helps provide consistency and prevent spellingerrors. A completion list can also make it easier to edit a documentwhen the user might not recall an item's name but would recognize thename in a list, e.g., a list of methods or classes in a source codefile.

For example, suppose a developer is editing a file that includes thefollowing source code if statement, and suppose a text insertion pointis indicated by the vertical bar |:

if (author != null) {  queryable = queryable.Where(x => x.| }

The text insertion point of a document in an editor is the locationwhere typed or pasted text would be inserted. It may be indicated by avertical bar |, or by some other visual indicator, or it may be presentwithout a visual indicator. In editors that recognize multiple inputdevices, such as a keyboard and a mouse, a distinction may be madebetween a text insertion point and a cursor location. A cursor may bepositioned by mouse movements without changing the text insertion point,and the text insertion point may change without moving the mouse cursor.Sometimes a mouse operation, e.g., a double-click, may be used to changethe text insertion point to match the mouse cursor location.

Some editors will display a completion list that is based on the textinsertion point, and some static information. For example, a completionlist having entries such as these might be displayed near the insertionpoint for the source code if statement above:

-   -   AfterAdminReview    -   ArticleFavorites    -   ArticleId    -   ArticleTags    -   Author    -   Body    -   Comments

FIG. 5 shows a completion list 302 near an insertion point 502 of a text208 that is being edited. The text 208 may be source code, but teachingsherein may also facilitate editing other kinds of text 208. Thecompletion list has entries 304. The completion list entries 304 and thetext 208 are shown in FIGS. 4 through 11 as line segments in order toprovide clarity, because the operations and operational resultsillustrated in the Figures do not depend on any particular text.

A completion list 302 may be generated by static analysis, e.g., from alist of available application program interfaces (APIs) and from programlanguage reserved words. Although such a completion list is oftenhelpful, it may contain entries that a software developer considersirrelevant at a particular insertion point in source code the developeris editing. Other entries of the completion list might be consideredrelevant, but they could still be somewhat distant from what thedeveloper wants.

Accordingly, a set of technical challenges arise involving editsuggestions offered to a developer or other user of an editor. One mayview these as challenges arising from this technical question: Howspecifically may an editing tool facilitate generation and presentationof appropriate editing suggestions at appropriate times and ways withinan editing session, and at appropriate places within a document that isbeing edited?

The present disclosure provides answers to this question, in the form ofedit automation functionalities which may be used in variouscombinations with one another, or alone, in a given embodiment.Determining appropriate editing suggestions, for example, may involvefocusing beyond a completion list by using a provisional selection—of acompletion list entry or other text—as an input to a machine learningmodel or other suggestion generation model. Determining appropriateplaces to make edits may involve not only an insertion point but stagedcommitment of a multi-part suggestion (or a set of related suggestions),and may interleave suggestion text with existing document text.Determining appropriate times and ways to make edit suggestions mayinvolve choices for commit gestures, choices of how to presentsuggestions in a user interface, and responses to cursor hovering. Theseand other functionalities are described herein.

Operating Environments

With reference to FIG. 1 , an operating environment 100 for anembodiment includes at least one computer system 102. The computersystem 102 may be a multiprocessor computer system, or not. An operatingenvironment may include one or more machines in a given computer system,which may be clustered, client-server networked, and/or peer-to-peernetworked within a cloud. An individual machine is a computer system,and a network or other group of cooperating machines is also a computersystem. A given computer system 102 may be configured for end-users,e.g., with applications, for administrators, as a server, as adistributed processing node, and/or in other ways.

Human users 104 may interact with the computer system 102 by usingdisplays, keyboards, and other peripherals 106, via typed text, touch,voice, movement, computer vision, gestures, and/or other forms of I/O. Ascreen 126 may be a removable peripheral 106 or may be an integral partof the system 102. A user interface may support interaction between anembodiment and one or more human users. A user interface may include acommand line interface, a graphical user interface (GUI), natural userinterface (NUI), voice command interface, and/or other user interface(UI) presentations, which may be presented as distinct options or may beintegrated.

System administrators, network administrators, cloud administrators,security analysts and other security personnel, operations personnel,developers, testers, engineers, auditors, and end-users are each aparticular type of user 104. Automated agents, scripts, playbacksoftware, devices, and the like acting on behalf of one or more peoplemay also be users 104, e.g., to facilitate testing a system 102. Storagedevices and/or networking devices may be considered peripheral equipmentin some embodiments and part of a system 102 in other embodiments,depending on their detachability from the processor 110. Other computersystems not shown in FIG. 1 may interact in technological ways with thecomputer system 102 or with another system embodiment using one or moreconnections to a network 108 via network interface equipment, forexample.

Each computer system 102 includes at least one processor 110. Thecomputer system 102, like other suitable systems, also includes one ormore computer-readable storage media 112. Storage media 112 may be ofdifferent physical types. The storage media 112 may be volatile memory,nonvolatile memory, fixed in place media, removable media, magneticmedia, optical media, solid-state media, and/or of other types ofphysical durable storage media (as opposed to merely a propagated signalor mere energy). In particular, a configured storage medium 114 such asa portable (i.e., external) hard drive, CD, DVD, memory stick, or otherremovable nonvolatile memory medium may become functionally atechnological part of the computer system when inserted or otherwiseinstalled, making its content accessible for interaction with and use byprocessor 110. The removable configured storage medium 114 is an exampleof a computer-readable storage medium 112. Some other examples ofcomputer-readable storage media 112 include built-in RAM, ROM, harddisks, and other memory storage devices which are not readily removableby users 104. For compliance with current United States patentrequirements, neither a computer-readable medium nor a computer-readablestorage medium nor a computer-readable memory is a signal per se or mereenergy under any claim pending or granted in the United States.

The storage medium 114 is configured with binary instructions 116 thatare executable by a processor 110; “executable” is used in a broad senseherein to include machine code, interpretable code, bytecode, and/orcode that runs on a virtual machine, for example. The storage medium 114is also configured with data 118 which is created, modified, referenced,and/or otherwise used for technical effect by execution of theinstructions 116. The instructions 116 and the data 118 configure thememory or other storage medium 114 in which they reside; when thatmemory or other computer readable storage medium is a functional part ofa given computer system, the instructions 116 and data 118 alsoconfigure that computer system. In some embodiments, a portion of thedata 118 is representative of real-world items such as productcharacteristics, inventories, physical measurements, settings, images,readings, targets, volumes, and so forth. Such data is also transformedby backup, restore, commits, aborts, reformatting, and/or othertechnical operations.

Although an embodiment may be described as being implemented as softwareinstructions executed by one or more processors in a computing device(e.g., general purpose computer, server, or cluster), such descriptionis not meant to exhaust all possible embodiments. One of skill willunderstand that the same or similar functionality can also often beimplemented, in whole or in part, directly in hardware logic, to providethe same or similar technical effects. Alternatively, or in addition tosoftware implementation, the technical functionality described hereincan be performed, at least in part, by one or more hardware logiccomponents. For example, and without excluding other implementations, anembodiment may include hardware logic components 110, 128 such asField-Programmable Gate Arrays (FPGAs), Application-Specific IntegratedCircuits (ASICs), Application-Specific Standard Products (ASSPs),System-on-a-Chip components (SOCs), Complex Programmable Logic Devices(CPLDs), and similar components. Components of an embodiment may begrouped into interacting functional modules based on their inputs,outputs, and/or their technical effects, for example.

In addition to processors 110 (e.g., CPUs, ALUs, FPUs, TPUs and/orGPUs), memory/storage media 112, and displays 126, an operatingenvironment may also include other hardware 128, such as batteries,buses, power supplies, wired and wireless network interface cards, forinstance. The nouns “screen” and “display” are used interchangeablyherein. A display 126 may include one or more touch screens, screensresponsive to input from a pen or tablet, or screens which operatesolely for output. In some embodiments, peripherals 106 such as humanuser I/O devices (screen, keyboard, mouse, tablet, microphone, speaker,motion sensor, etc.) will be present in operable communication with oneor more processors 110 and memory.

In some embodiments, the system includes multiple computers connected bya wired and/or wireless network 108. Networking interface equipment 128can provide access to networks 108, using network components such as apacket-switched network interface card, a wireless transceiver, or atelephone network interface, for example, which may be present in agiven computer system. Virtualizations of networking interface equipmentand other network components such as switches or routers or firewallsmay also be present, e.g., in a software-defined network or a sandboxedor other secure cloud computing environment. In some embodiments, one ormore computers are partially or fully “air gapped” by reason of beingdisconnected or only intermittently connected to another networkeddevice or remote cloud. In particular, edit automation functionalitycould be installed on an air gapped network and then be updatedperiodically or on occasion using removable media. A given embodimentmay also communicate technical data and/or technical instructionsthrough direct memory access, removable nonvolatile storage media, orother information storage-retrieval and/or transmission approaches.

One of skill will appreciate that the foregoing aspects and otheraspects presented herein under “Operating Environments” may form part ofa given embodiment. This document's headings are not intended to providea strict classification of features into embodiment and non-embodimentfeature sets.

One or more items are shown in outline form in the Figures, or listedinside parentheses, to emphasize that they are not necessarily part ofthe illustrated operating environment or all embodiments, but mayinteroperate with items in the operating environment or some embodimentsas discussed herein. It does not follow that items not in outline orparenthetical form are necessarily required, in any Figure or anyembodiment. In particular, FIG. 1 is provided for convenience; inclusionof an item in FIG. 1 does not imply that the item, or the described useof the item, was known prior to the current innovations.

More about Systems

FIG. 2 illustrates a computing system 102 configured by one or more ofthe edit automation enhancements taught herein, resulting in an enhancedsystem 202. This enhanced system 202 may include a single machine, alocal network of machines, machines in a particular building, machinesused by a particular entity, machines in a particular datacenter,machines in a particular cloud, or another computing environment 100that is suitably enhanced. The illustrated system 202 includes hardwaresuch as a processor 110, memory 112, and display 126, as well as one ormore I/O device peripherals 106 such as a keyboard, mouse, microphone,or speakers.

The illustrated system 202 includes an editor 204, which may be, forexample, any tool 122 that has editing functionality of the kind taughtherein. A document 206 containing text 208 may be brought from a file,blob, etc. of a disk, server, storage resource, or other machine, etc.into the editor 204 for editing. Editing occurs in response to inputreceived through a user interface 210. The document 206 may be displayedon the screen 126 by operation of the user interface 210. Theillustrated system 202, and in particular the editing tool 204, isenhanced by the presence and operation of innovative functionality thatperforms edit automation as taught herein.

In particular, edit context information 212 which includes at least oneprovisional selection 214 is submitted to a model 216 that generatesedit suggestions 218. Herein the term “suggestion” indicates either orboth of two categories of suggestion—those which are driven byprovisional selection, and those which are not. Some suggestions 218 aregenerated by a suggestion generation model 216 that is driven at leastin part by provisional selections 214; changing the provisionalselection generally changes the suggestions generated. Other suggestions218 may be created in other ways that are not driven by provisionalselection, e.g., by an autocompletion functionality that uses staticanalysis (including the current location of the text insertion point), acatalog of API identifiers, and a list of program language reservedwords, without a dependence on provisional selections 214.

In some embodiments, the suggestion generation model 216 may include,for example a neural network, a deep learning network, or other machinelearning model 220 trained on data gathered from editing sessions. Inaddition, or instead, suggestion generation model 216 may include asynthesizer that is equipped with Microsoft PROSE™ technology or anotherprogram synthesis technology to synthesize edit suggestions (mark ofMicrosoft Corporation). In some embodiments, the suggestion generationmodel 216 may include a list of code snippets, or a list based on APIdocumentation. More generally, the suggestion generation model 216 mayinclude one or more learning machine models 220 or other components,static or dynamic or both.

One suitable machine learning model 220 includes a neural transformermodel having multiple decoder blocks. A decoder block includes amulti-head self-attention layer coupled to a multi-layer one-dimensionalconvolutional neural network. Layer normalization is applied before andafter the multi-head self-attention layer in order to reduce thetraining time of the neural transformer model. A beam search is used togenerate candidate sequences. The beam search uses the top ksubtokens/tokens, identified from each iteration of the neuraltransformer model, to expand a partial candidate sequence oftokens/subtokens likely to complete a line of source code. The beamsearch generates a search tree but only keeps the top k nodes at eachinference level to expand the search. The search ends when theend-of-line token appears as the most probable prediction. A token is asingle element in a grammar of a programming language, such as akeyword, variable name, operator, delimiter, etc.

FIG. 3 shows some examples of edit suggestions 218 and some aspects ofsome edit suggestions 218. This is not a comprehensive summary of allsuggestion 218 aspects or of every suggestion 218. These items arediscussed at various points herein, and additional details regardingthem are provided in the discussion of a List of Reference Numeralslater in this disclosure document.

FIGS. 4 through 11 illustrate text suggestion and editing operations andresults using a stylized user interface 400. These operations andresults are discussed at various points herein, including under aheading “Processes (a.k.a. Methods)”, but it will be understood thatthey are also relevant to systems 202 because a system 202 may beequipped and configured to perform such operations and produce suchresults.

FIG. 12 shows some aspects of some editors 204 and some aspects of someeditor user interfaces 210. This is not a comprehensive summary of alleditor aspects or user interface aspects, or of every editor or everyeditor user interface. These items are discussed at various pointsherein, and additional details regarding them are provided in thediscussion of a List of Reference Numerals later in this disclosuredocument.

Some embodiments use or provide a functionality-enhanced system, such assystem 202 or another system 102 that is enhanced as taught herein. Insome embodiments, an enhanced system is configured to display textsuggestions which change according to provisional selections from a userduring an editing session. This enhanced system includes a digitalmemory 112, a processor 110 in operable communication with the memory, adisplay device 126, and an editor 204 having a user interface 210. Thedigital memory is configurable to contain a document 206, with thedocument including document text 208. Upon execution with the processor,the user interface 210 displays at least a portion of the document onthe display device. The user interface shows, defines, or otherwiseincludes a text insertion point 502. The digital memory 112 may bevolatile or nonvolatile or a mix.

The processor 110 is configured to perform editing automation steps. Thesteps include automatically (a) submitting 1304 edit context information212 to a suggestion generation model 216, the edit context informationincluding a provisional selection 214 of displayed text that is notnecessarily part of the document (e.g., a provisionally selectedcompletion list entry text that is not yet part of the document, or aprovisionally selected hover target text that is part of the document),(b) getting 1306 from the suggestion generation model a text suggestion218 which is based at least in part on the provisional selection, and(c) displaying 1308 the text suggestion near the text insertion point502. Some embodiments throttle displaying 1308 of different suggestions,to avoid a flashing sequence of different suggestions as a user types.Throttled displaying may be done, e.g., by displaying 1308 a differentsuggestion at most once every M seconds, with M being in the range ofone to ten, and in some embodiments M being at least three.

Herein, a suggestion is deemed “near” a text insertion point if any partof the suggestion is within a circle of radius R centered at the centerof the text insertion point, where R is ten times a font height of afont in which the suggestion is displayed. More generally, a displayedtext item X is “near” a point C when any part of X is within a circle ofradius R centered at point C, where R is ten times a font height of afont in which X is displayed.

In some embodiments, the document text includes source code 306, and theprovisional selection 214 includes at least one of the following: auser-indicated entry 304 in a completion list 302 which includes sourcecode method 322 suggestions 218; a user-indicated entry 304 in acompletion list 302 which includes source code property 310 suggestions218; a user-indicated entry 304 in a completion list 302 which includessource code reserved word 312 suggestions 218; a user-indicated entry304 in a completion list 302 which includes source code data variable314 suggestions 218; a user-indicated entry 304 in a completion list 302which includes source code data structure 316 suggestions 218; auser-indicated entry 304 in a completion list 302 which includes sourcecode identifiers 318 from one or more application program interface 320suggestions 218; a user-indicated entry 304 in a completion list 302which includes source code method argument 324 suggestions 218; or auser-indicated entry 304 in a completion list 302 which includes sourcecode overloaded method 326 suggestions 218.

Some or all of a given document's text 208 may also be non-source code308, e.g., natural language prose that is not contained in a source codecomment. In addition to containing text 208, documents 206 may containimages. Text 208 includes, but is not limited to, alphanumericcharacters. Symbols, kanji, widgets, icons, emojis, and all othernon-alphanumeric characters are considered to be text 208 if they belongto a font, e.g., a Unicode® font (mark of Unicode, Inc.). Any characteror other glyph that belongs to a Unicode® font is text 208.

In some embodiments, the edit automation steps include producing 1404 afiltered completion item list 328, 302 by filtering a set of source codecompletion items 304, and the provisional selection includes auser-indicated entry 304 in the filtered completion item list 328. Forexample, a completion list may be filtered to include or excludemethods, classes, items from a current project, fields, keywords, and soon, including combinations of these filters.

In some embodiments, the edit automation steps include detecting 1430that a cursor is hovering 1432 over a hover target portion 1204 of thedocument text, and the provisional selection includes at least part ofthe hover target portion 1204. The hover target may be a particularscreen coordinate location or set of screen coordinates designated by acursor, for example. The hover target portion may be a character, word,clause, sentence, paragraph, or other portion of the displayed textwhich is near the hover target under the definition of “near” providedherein. The extent of the portion 1204 varies according to theembodiment involved, and may also vary according to how a particularembodiment is configured, e.g., a default portion may be a word, and maybe expanded to a paragraph by an additional gesture 1208.

For example, FIG. 9 shows a hover target 1202 indicated by a mousecursor 1206, and also shows a completion list 302 in which one entry 304has been provisionally selected 214. In this situation, the edit contextinformation 212 submitted to a suggestion generator 216 may include theprovisionally selected entry, may include the text word or other portion1204 indicated by the cursor, or may include both pieces of data,depending on the embodiment and possibly on how the embodiment isconfigured.

In some embodiments, the edit automation steps include committing 1310the text suggestion. Committing 1310 includes receiving 1406 anacceptance of at least a part of the text suggestion, designating 1408the part of the text suggestion as an accepted part 330, and altering1410 the document text to include a copy of the accepted part.

For example, FIG. 7 shows a provisional-selection-driven text suggestion218 (indicated by the dashed line segment) which has not been committed.FIG. 8 shows the altered document after that text suggestion has beencommitted; the solid line segment in FIG. 8 accordingly replaces thedashed line segment of FIG. 7 . In this example, the commitment 1310includes receiving 1406 an acceptance in the form of a commit gesture1208, e.g., a tab key press, an enter key press, or a mouse buttonclick. In this example, designating 1408 the suggestion as an acceptedpart and altering 1410 the document are both accomplished by executingsoftware that inserts 1412 a copy of the suggestion into the document atthe insertion point, and replaces the display of the suggestion stringwith a display of the inserted copy. As feedback to improve suggestiongeneration, data designating 1408 the suggestion as accepted may also besubmitted 1304 to the suggestion generator. To reflect editing, thedisplay 126 appearance changes from visually indicating a suggestion(e.g., as a dashed line segment in the Figures, as grey text 1222 in anembodiment) to visually indicate that some or all of the suggestion textis now part of the document (e.g., as a solid line segment in theFigures, and as solid black text in an embodiment).

Other system embodiments are also described herein, either directly orderivable as system versions of described processes or configured media,duly informed by the extensive discussion herein of computing hardware.

Although specific edit automation architecture examples are shown in theFigures, an embodiment may depart from those examples. For instance,items shown in different Figures may be included together in anembodiment, items shown in a Figure may be omitted, functionality shownin different items may be combined into fewer items or into a singleitem, items may be renamed, or items may be connected differently to oneanother.

Examples are provided in this disclosure to help illustrate aspects ofthe technology, but the examples given within this document do notdescribe all of the possible embodiments. A given embodiment may includeadditional or different technical features, visual indications, userinterface mechanisms, operational sequences, data structures, or otherfunctionalities for instance, and may otherwise depart from the examplesprovided herein.

Processes (a.k.a. Methods)

FIGS. 4 through 11 illustrate operational sequences, which may be partof process embodiments or be performed by system embodiments, forexample. FIG. 4 shows a stylized user interface 210 containing documenttext 208. The text 208 is represented in the Figures by line segments,because the particular fonts, font sizes, colors, natural languagetexts, and programming language texts used may vary in an embodiment orvary across embodiments. The text 208 may be read from a file, may beentered by typing or by pasting, may be entered through suggestionacceptance and commitment, or (perhaps most likely) may be createdthrough a combination of these and other operations.

FIG. 5 shows the document text and user interface of FIG. 4 , with acompletion list 302 displayed to assist editing at a text insertionpoint 502. The completion list may be created by technology such asIntelliSense® or IntelliCode™ autocompletion, for example (marks ofMicrosoft Corporation).

In a system 102 that is equipped with such autocompletion technology butis not equipped with provisional-selection-driven suggestion generationas taught herein, there might be no text displayed immediately after thetext insertion point. This approach has the appearance illustrated inFIG. 5 .

However, one of skill informed by the teachings herein may also envisiona system that is equipped to display both categories of suggestion:those whose generation 1434 was driven by provisional selection, andthose whose creation did not depend on provisional selection. In such asystem 202, the suggestion based on provisional selection could bedisplayed near the text insertion point and on the same line, as shownin FIG. 6 , or the suggestion could be displayed near the text insertionpoint but not necessarily on the same line.

In particular, the suggestion based on provisional selection could bedisplayed near the text insertion point but as an entry in thecompletion list instead of on the same line. If no visual distinction ismade between completion list entries 304 according to whether or notthey were generated 1434 using provisional selection, then theappearance illustrated in FIG. 5 would also match this alternativeembodiment. A visual distinction could instead be made, e.g., bydisplaying the provisional-selection-based suggestion in bold or in adifferent color than the other list entries.

FIG. 6 shows the document text and user interface of FIG. 5 , with anentry of the completion list provisionally selected and a correspondingsuggestion text displayed. The provisionally selected entry is indicatedin this diagram as a thicker line segment, but in an embodiment theentry could be highlighted 1224 or shown in a different color 1228 orotherwise visually indicated 1220 to show its status 1230, for example.The provisional-selection-based suggestion text is indicated in theFigures as a dashed line segment.

Thus, one operational sequence includes opening a file for editing (FIG.4 ), reaching a text insertion point at which a completion list isdisplayed (FIG. 5 ), and provisionally selecting an entry of thecompletion list (FIG. 6 ). As a consequence of the provisionalselection, edit context information 212 including the provisionalselection is submitted 1304 to a suggestion generator 216, aprovisional-selection-based suggestion is gotten 1306 from thesuggestion generator, and the provisional-selection-based suggestion isdisplayed 1308 near the text insertion point (also shown in FIG. 6 ).

To illustrate another aspect of some embodiments, FIG. 6 also shows ametainformation text 1212 displayed next to the provisionally selectedentry. The metainformation text 1212 includes a description 1216 of oneor more tokens 1214 of source code corresponding to the provisionallyselected entry. For instance, the description may includemetainformation 1210 such as the name of a method, the method's list ofexpected arguments, and a short statement of the method's intendedpurpose. The metainformation text 1212 may be provided by functionalitysuch as Visual Studio® IntelliSense® List Members, Parameter Info, orQuick Info functionality, for example (marks of Microsoft Corporation).In some embodiments hovering a cursor 1206 over metainformation text1212 performs a provisional selection, so that some or all of thedisplayed metainformation text 1212 is submitted 1304 to the suggestiongenerator 216 as edit context information. For clarity of illustrationthis is not shown in FIG. 6 , but a hovering cursor is shown in FIG. 9 .

FIG. 7 continues the operational sequence illustrated in FIGS. 4 through6 . After an entry of the completion list is provisionally selected anda corresponding provisional-selection-based suggestion is displayed(FIG. 6 ), a different entry of the completion list is provisionallyselected and a corresponding different suggestion text is displayed(FIG. 7 ). This illustrates dependence of the displayed suggestion 218on the provisional selection 214. This dependence is missing fromsystems 102 that do not generate 1434 suggestions based partially (orentirely) on a current provisional selection 214.

FIG. 8 continues the operational sequence illustrated in FIGS. 4 through7 . This operational sequence is shown by FIGS. 4, 5, 6, 7, and 8 inthat order. FIG. 8 shows the document text after the most recentprovisional selection was accepted 1406 and the corresponding differentsuggestion text 218 was placed 1410 in the document text. In theFigures, this is represented by replacing the dashed line segment(suggestion) with a solid line segment of the same length (suggestioncommitted as document text). In an embodiment, the appearance of thedisplayed text would change, e.g., from grey text to solid text.

FIG. 9 shows an operational sequence variation. In this example theoperational sequence is shown by FIGS. 4, 5, 6, 7, and 9 , in thatorder. As with other operational sequences discussed herein, there maybe intervening operations that are not necessarily shown in the Figures.Implied or presumed operations such as opening the file for editing(FIG. 4 ) may also be omitted from some examples.

In FIG. 9 , a cursor 1206 is hovering over a target portion 1204 of thedocument text. This is treated as provisional selection edit contextinformation 212, and is submitted 1304 to the suggestion generator 216.As a result, the provisional-selection-based suggestion 218 displayed inFIG. 9 is different than the provisional-selection-based suggestion 218displayed in FIG. 7 , even though the same completion list entry isprovisionally selected in both Figures. The difference in suggestions isshown in the two Figures by different lengths of dashed line segment. Inan embodiment, the two suggestions might be text strings of differentlengths, or they could coincidentally have the same length but havedifferent content. In some but not all cases that treat hovering as editcontext information, the hovering might not alter what suggestion isgenerated.

FIG. 10 shows another operational sequence variation. In this example anoperational sequence is shown by FIGS. 4 and 10 , in that order. FIG. 10shows a different completion list than the completion list of FIGS. 5,6, 7, 9, and 11 . FIG. 10 also shows a two-part 332 suggestion textbeing displayed. This two-part suggestion may also be viewed as a set oftwo related suggestions.

As an example, the user interface could display the following:

import sockets=socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((“127.0.0.1”, 0))

to accept|”, 0))

In this example, document text is shown in bold, and the generated 1434suggestion is “127.0.0.1”, 0))\r\n”, which is not bolded. The documenttext includes both “s.connect((“ ” and “ ”, 0))”. The \r\n returncharacter—an arrow pointing down and then left—is part of aprovisional-selection-driven suggestion 218. The right arrow block andthe words “to accept” are not part of the document, and also not part ofthe suggestion text per se; they are an aid to the user indicating thatthe gesture to accept the suggestion is to press the right arrow key.The text insertion point is indicated by the vertical bar |. The textinsertion point in this example is at the end of the suggestion, asopposed to the beginning; either position may be used, depending on theembodiment and configuration employed.

As an alternative, the user interface could display the following:

import sockets=socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect((“127.0.0.1|”, 0))

to accept

In this alternative, the text insertion point is different. Thegenerated 1434 suggestion is in two parts: “127.0.0.1” and the suggestedreturn character. The document text “ ”, 0))” is intervening text 1218,208 between the two suggestion parts (or equivalently, between tworelated suggestions). As another example of intervening text, anembodiment might insert suggestion text between typed text, e.g., forautocompletion or spelling correction. For instance, in an example text“Console.WriteLine(args)” the “W” and the “L” could be characters typedby a user, and the rest of the example text could be generatedsuggestion text.

As a practical matter, a distinction between a single suggestion 218that has multiple parts and a set of multiple related suggestions 218may be deemed merely a matter of implementation detail choice, or aterminology preference. Accordingly, they are treated herein asequivalent. One of skill will readily convert a multiple part suggestionexample to an example involving multiple related suggestions, and viceversa. Likewise, one of skill will readily apply to a multiple partsuggestion any teachings given herein involving multiple relatedsuggestions, and vice versa.

Multi-part text suggestions, or equivalent sets of multiple related textsuggestions, may arise in at least two kinds of situation: situationswith intervening document text, and situations with staged acceptance.FIG. 10 shows a situation with document text intervening between twoparts 332 of a suggestion (or equivalently, between two relatedsuggestions).

FIG. 11 shows another operational sequence variation. In this example anoperational sequence is shown by FIGS. 4, 5, 6, 7, and 11 , in thatorder. FIG. 11 shows a staged acceptance situation after a firstacceptance of a leftmost part of a suggestion, or equivalently, afterthe acceptance of a first suggestion in a set of related suggestions. Inthis example, the change in edit context information (e.g., differentdocument text due to the acceptance, and different text insertion point)causes a change in the completion list. This completion list change isshown in the Figures for respective entries above the provisionallyselected entry; there are two line segments in the FIG. 11 entry versusone line segment in the FIG. 7 entry. However, staged acceptance doesnot necessarily change any completion list entries.

As an example of staged acceptance, suppose a provisional selection hasbeen made, and suppose a text insertion point 502 | and a generated 1434suggestion 218 are as shown below, where document text in this exampleis non-italic and the suggestion text 218 is in italics and bold (theinconsistent use of bold 1226 in some examples is intentional, toemphasize that embodiments may use various visual indicators 1220):

Console.|BackgroundColor=System.Drawing.Color.White;

Although not shown in this particular example, different parts 332 of asuggestion, or different suggestions of a set of related suggestions,could be distinguished visually from one another, e.g., by coloring, toshow a user which part will be accepted next. In some embodiments,different parts 332 (or different suggestions of a related set) can beseparately selected, e.g., by mouse double click, and the selection willbe accepted next. In a system 202 equipped for staged acceptance, theuser might then accept a first part of the suggestion (or equivalentlythe first suggestion of a set), resulting in:

Console. BackgroundColor=|System.Drawing.Color.White;

The user might then reject the rest of the suggested text, yielding:

Console.BackgroundColor=getChosenColor( );|

Alternatively, the user might accept more but not all of the initialsuggestion, leading first to this:

Console.BackgroundColor=System.Drawing.Color.|White;

And then after typing an override string, to this:

Console.BackgroundColor=System.Drawing.Color.LightYellow;|

Some embodiments that implement staged acceptance avoid reliance on twoor more commit characters 1208. For instance, they avoid recognizing onecharacter as a command to commit an entire line of suggestion when adifferent character would be recognized as a command to commit less.Some embodiments avoid recognizing one character as a command to commita provisional-selection-driven suggestion when a different characterwould be recognized as a command to commit another kind of suggestion,e.g., a completion list entry. Having a single commit gesture may beeasier for users.

In the FIG. 10 situation, and others, acceptance could be staged, orinstead acceptance could be all-or-nothing. That is, the embodiment andsituation might support a staged acceptance sequence which allows a userto accept the leftmost suggestion part or the rightmost suggestion partseparately from the other suggestion part. Or the embodiment andsituation might not be staged, in that the user can only accept orreject both parts together.

FIG. 13 illustrates a family of methods 1300 that may be performed orassisted by an enhanced system, such as system 202 or another editautomation functionality enhanced system as taught herein. FIG. 14further illustrates edit automation methods (which may also be referredto as “processes” in the legal sense of that word) that are suitable foruse during operation of a system which has innovative functionalitytaught herein. FIG. 14 includes some refinements, supplements, orcontextual actions for steps shown in FIGS. 4 through 11 and 13 , andincorporates the steps of those Figures as options.

Technical processes shown in the Figures or otherwise disclosed will beperformed automatically, e.g., by an enhanced editor 204, unlessotherwise indicated. Processes may also be performed in partautomatically and in part manually to the extent action by a humanperson is implicated, e.g., in some embodiments a human may manuallymove a mouse to guide positioning of a cursor 1206 or type keys to guideinsertion of text 208, but no process contemplated as innovative hereinis entirely manual.

In a given embodiment zero or more illustrated steps of a process may berepeated, perhaps with different parameters or data to operate on. Stepsin an embodiment may also be done in a different order than thetop-to-bottom order that is laid out in FIGS. 13 and 14 . Steps may beperformed serially, in a partially overlapping manner, or fully inparallel. In particular, the order in which flowchart 1300 or 1400action items are traversed to indicate the steps performed during aprocess may vary from one performance of the process to anotherperformance of the process. The flowchart traversal order may vary fromone process embodiment to another process embodiment. Operationalsequences may differ from those shown in FIGS. 4 through 11 . Steps mayalso be omitted, combined, renamed, regrouped, be performed on one ormore machines, or otherwise depart from the illustrated flow, providedthat the process performed is operable and conforms to at least oneclaim.

Some embodiments use or provide editing method suitable for performanceby a system, including methods which provide updated text suggestions218 as a user changes provisional selections 214 during a documentediting session. Some methods include the following steps: obtaining1302 via a user interface a first provisional selection; submitting 1304the first provisional selection to a suggestion generation model;getting 1306 from the suggestion generation model a first textsuggestion which is based at least in part on the first provisionalselection; displaying 1308 the first text suggestion; obtaining 1302 viaa user interface a second provisional selection; submitting 1304 thesecond provisional selection to the suggestion generation model; getting1306 from the suggestion generation model a second text suggestion whichis based at least in part on the second provisional selection; removing1438 the first text suggestion from being displayed; and displaying 1308the second text suggestion. This is shown, e.g., in the operationalsequence illustrated by FIGS. 6 and 7 .

Some embodiments include receiving 1406 an acceptance of a part of thesecond text suggestion, the part 330 being less than all of the secondtext suggestion, and then inserting 1412 the part into the documenttext. This is shown, e.g., in the operational sequence illustrated byFIGS. 7 and 11 .

In some embodiments, the second text suggestion spans 334 more than oneline 1232 of text. This would be shown, for instance, in any of FIG. 6,7, 9 , or 11 if the single dashed line segment were replaced by two ormore dashed line segments on two or more consecutive display lines 1232.

In some embodiments, at least one of the text suggestions includes amulti-part text suggestion having at least two parts 332, and the methoddisplays the two parts with an intervening portion 1218 of document textdisplayed between the two parts. This is shown, e.g., in FIG. 10 .

Some embodiments include getting 1306 from the suggestion generationmodel a third text suggestion which is also based at least in part onthe second provisional selection; and displaying 1308 the third textsuggestion at the same time as displaying the second text suggestion.This is shown, e.g., in the operational sequence illustrated by FIGS. 6,7, and 9 , or the operational sequence illustrated by FIGS. 6, 7, and 11.

Some embodiments include acquiring 1420 metainformation text whichincludes a natural language description of a token that is representedby at least a part of the second text suggestion; and displaying 1402the metainformation text at the same time as displaying 1308 the secondtext suggestion (e.g., as shown in FIG. 6 ).

Some embodiments include getting 1440 a third text suggestion from anorigin 336 which is not the suggestion generation model 216; anddisplaying 1422 the third text suggestion at the same time as displaying1308 the second text suggestion. Assuming the completion list entries304 do not originate 336 at the suggestion generator 216, this situationwould be shown in FIG. 7 or FIG. 11 , with the second text suggestionshown as a dashed line segment and the third text suggestion shown as acompletion list entry.

Some embodiments include committing 1310 the second provisionalselection upon receiving a first instance of a commit gesture; and thencommitting 1310 at least a part of the second text suggestion uponreceiving a second instance of the commit gesture. Committing 1310 asecond provisional selection upon receiving a first instance of a commitgesture is shown by FIGS. 7 and 8 . Committing 1310 at least a part ofthe second text suggestion upon receiving a second instance of thecommit gesture is shown by FIGS. 7 and 11 .

In some embodiments, the provisional selection corresponds to an item ina set 1234 of available provisional items 1236, and method includesdisplaying 1414 at least a portion of the set of available provisionalitems. This is illustrated in FIGS. 6, 7, 9, 10, and 11 , with theprovisional items 1236 being completion list entries 304. This is alsoillustrated in FIG. 9 with the provisional items 1236 being characters,words, or other displayed text 208.

Some embodiments include modifying 1426 the second text suggestion basedon user input 1238, and then committing 1310 the second text suggestionas modified. For example, in a variation of the operational sequenceshown in FIGS. 7 and 8 , the suggestion indicated by the dashed linesegment in FIG. 7 could be modified 1426 by user actions before beingcommitted 1310. The same document text would perhaps result if the sameedits 1426 were done after the unmodified suggestion was committed, butthe order of operations could make a difference in some embodiments. Forinstance, edited non-committed text might be a feedback signal to thesuggestion generator in an embodiment in which edited committed text(and other document text 208) is not used for such feedback. Manuallyediting a suggestion may drive automatic refinements to the suggestion.

Some embodiments include detecting 1430 that a cursor is hovering 1432over a hover target, and the provisional selection corresponds to atleast a part of the hover target. This is illustrated in FIG. 9 .

Configured Storage Media

Some embodiments include a configured computer-readable storage medium112. Storage medium 112 may include disks (magnetic, optical, orotherwise), RAM, EEPROMS or other ROMs, and/or other configurablememory, including in particular computer-readable storage media (whichare not mere propagated signals). The storage medium which is configuredmay be in particular a removable storage medium 114 such as a CD, DVD,or flash memory. A general-purpose memory, which may be removable ornot, and may be volatile or not, can be configured into an embodimentusing items such as provisional selections 214, edit context information212, suggestion generation models 216, completion lists 302, suggestions218, suggestion parts 332, hover targets 1202, text status visualindicators 1220, and enhanced editors 204, in the form of data 118 andinstructions 116, read from a removable storage medium 114 and/oranother source such as a network connection, to form a configuredstorage medium. The configured storage medium 112 is capable of causinga computer system 102 to perform technical process steps for editautomation, as disclosed herein. The Figures thus help illustrateconfigured storage media embodiments and process (a.k.a. method)embodiments, as well as system and process embodiments. In particular,any of the process steps illustrated in FIGS. 4 through 11, 13 , or 14,or otherwise taught herein, may be used to help configure a storagemedium to form a configured storage medium embodiment.

Some embodiments use or provide a computer-readable storage medium 112,114 configured with data 118 and instructions 116 which upon executionby at least one processor 110 cause a computing system to perform anediting method which provides updated text suggestions as a user changesprovisional selections during a document editing session. This methodincludes: obtaining 1302 via a user interface a first provisionalselection; submitting 1304 the first provisional selection to asuggestion generation model 216 which includes a machine learning model220; getting 1306 from the suggestion generation model a first textsuggestion which is based at least in part on the first provisionalselection; displaying 1308 the first text suggestion; obtaining 1302 viaa user interface a second provisional selection; submitting 1304 thesecond provisional selection to the suggestion generation model; getting1306 from the suggestion generation model a second text suggestion whichis based at least in part on the second provisional selection; removing1438 the first text suggestion from being displayed; and displaying 1308the second text suggestion.

In some embodiments, the second text suggestion spans 334 more than oneline of text. In some embodiments, the method includes getting 1306 atleast two text suggestions from the machine learning model, anddisplaying 1422 the at least two text suggestions interleaved 1418 withdocument text 208.

In some embodiments, the second text suggestion is displayed 1424 as anentry in a completion list. This would be illustrated, e.g., in avariation of FIG. 5 in which one of the entries 304 is shown as a dashedline segment to indicate it is a provisional-selection-based suggestion218.

In some embodiments, the provisional selection corresponds to an item ina set 1234 of available provisional items, and method includes at leastone of the following: displaying 1402 a column 1240 of availableprovisional items; displaying 1402 a grid 1242 of available provisionalitems; or displaying 1402 a scrollable list 1244 of availableprovisional items. FIGS. 5, 6, 7, 9, 10, and 11 each display 1402 acolumn 1240 of available provisional items in the form of a completionlist 302. Variations of these Figures would illustrate displays ofentries 304 arranged in a scrollable list (e.g., a scrollable column) orin a grid (e.g., a two column array of entries).

Additional Examples and Observations, Generally

Additional support for the discussion of edit automation herein isprovided under various headings. However, it is all intended to beunderstood as an integrated and integral part of the presentdisclosure's discussion of the contemplated embodiments.

One of skill will recognize that not every part of this disclosure, orany particular details therein, are necessarily required to satisfylegal criteria such as enablement, written description, or best mode.Any apparent conflict with any other patent disclosure, even from theowner of the present innovations, has no role in interpreting the claimspresented in this patent disclosure. With this understanding, whichpertains to all parts of the present disclosure, additional examples andobservations are offered.

Some embodiments use or provide completions-driven predictions, bydisplaying multi-token completions for code authoring using acombination of a completions list and inline text suggestion. One ofskill will acknowledge that software developers spend a lot of timeauthoring code and have been offered various auto-completion tools overthe years. Some approaches include machine learning-driven suggestionsfor autocompletion, which have begun to span multiple tokens, right upto whole lines of code. Such multi-token completions have been displayedto the user via either a completions list entry or via inline text shownon a line of code where the developer's editing caret is located. Theselocations each offer their own separate advantages.

However, some whole line completion approaches combine the best of bothdisplay options. In some, the completions list is used to indicate userintent to the whole line completions model, allowing the user a smoothexploration of the possible completions.

For instance, suppose a developer is working to write the line of code:

-   -   Console.Write(someStringVariable);

A full line prediction when the insertion point reached the “.” ofConsole might be:

-   -   Console.WriteLine(someStringVariable);

But this does not match the developer's intent. The developer uses acompletions list, which includes a recommendation of .Write, to indicatethe direction they are going in (a desire to use .Write), and as thedeveloper browses the list to Write they would see the full linerecommendation change, to show the best model item that includes .Write,such as:

-   -   Console.Write(someStringVariable);

Then the developer could quickly select this suggestion. In this way,the completions list allows a fuller exploration of the full-linecompletion model's contents with the fewest possible keystrokes, drivenby the developer's indicated intent from the selection in thecompletions list.

One technical advantage of some embodiments is that other methods ofdisplay (completions list only, and inline text only) cannot allow asfluid or complete an exploration of the potential completions with asfew keystrokes or other gestures. Inline text only can only display thepredictions for the text up to the user's insertion caret, and can'thave any way to display other options since it is inherently showingonly one prediction at a time. A traditional completions list candisplay more than one prediction, but using it forces the user to parsemany if not all of those prediction entries in order to make aselection, increasing cognitive load. By contrast, some embodimentsallow more than one prediction to be displayed quickly and easily, withsuggestions driven by the user's nascent indication of their intent bymeans of their browsed selection (provisional selection) in thecompletions list.

Another technical advantage is that the predictions (suggestions) fromthe model do not need to be as tightly focused on a single choice aswith the inline text only approach. Some models 216 produce morepredictions than prior approaches could effectively surface to a user ina single grey text line. With the benefit of user interface examples andother teachings provided herein, multiple competing suggestions can bedisplayed in turn as the provisional selection changes, e.g., as theuser scrolls through the completion list or hovers over different text,or both. This also reduces pressure on the suggestion generator to be100% accurate in predicting what a user wants.

Technical Character

The technical character of embodiments described herein will be apparentto one of ordinary skill in the art, and will also be apparent inseveral ways to a wide range of attentive readers. Some embodimentsaddress technical activities such as altering 1410 digital text 208,computationally gathering 1436 edit context information andelectronically submitting 1304 it to a suggestion generator 216,displaying 1402 text 208, 218, 1212 in an editing tool 204, and visuallyindicating 1220 text status 1230 on a computing system display 126,which are each an activity deeply rooted in computing technology. Someof the technical mechanisms discussed include, e.g., machine learningmodels 220, completion lists 302, user interfaces 210, user interfacegestures 1208, scrollable lists 1244, and filtered lists 328. Some ofthe technical effects discussed include, e.g., displays 1422 of in linesuggestions 218 and completion list suggestions 304 at the same time(overlapping display periods, not necessarily identical), generation1434 of edit suggestions 218 based on provisional selections 214,displays 1416 of suggestions interleaved 1418 with document text 208,and staged acceptance of part 332 of a suggestion or of one suggestionfrom a set of related suggestions 218. Thus, purely mental processes andactivities limited to pen-and-paper are clearly excluded. Otheradvantages based on the technical characteristics of the teachings willalso be apparent to one of skill from the description provided.

Some embodiments described herein may be viewed by some people in abroader context. For instance, concepts such as availability, awareness,ease, efficiency, or user satisfaction, may be deemed relevant to aparticular embodiment. However, it does not follow from the availabilityof a broad context that exclusive rights are being sought herein forabstract ideas; they are not. Rather, the present disclosure is focusedon providing appropriately specific embodiments whose technical effectsfully or partially solve particular technical problems, such as how toautomatically generate text editing suggestions and effectively presentthem to someone who is using an editor. Other configured storage media,systems, and processes involving availability, awareness, ease,efficiency, or user satisfaction are outside the present scope.Accordingly, vagueness, mere abstractness, lack of technical character,and accompanying proof problems are also avoided under a properunderstanding of the present disclosure.

Additional Combinations and Variations

Any of these combinations of code, data structures, logic, components,communications, and/or their functional equivalents may also be combinedwith any of the systems and their variations described above. A processmay include any steps described herein in any subset or combination orsequence which is operable. Each variant may occur alone, or incombination with any one or more of the other variants. Each variant mayoccur with any of the processes and each process may be combined withany one or more of the other processes. Each process or combination ofprocesses, including variants, may be combined with any of theconfigured storage medium combinations and variants described above.

More generally, one of skill will recognize that not every part of thisdisclosure, or any particular details therein, are necessarily requiredto satisfy legal criteria such as enablement, written description, orbest mode. Also, embodiments are not limited to the particularmotivating examples, operating environments, time period examples,software processes, identifiers, data structures, data selections,naming conventions, notations, control flows, or other implementationchoices described herein. Any apparent conflict with any other patentdisclosure, even from the owner of the present innovations, has no rolein interpreting the claims presented in this patent disclosure.

Acronyms, Abbreviations, Names, and Symbols

Some acronyms, abbreviations, names, and symbols are defined below.Others are defined elsewhere herein, or do not require definition herein order to be understood by one of skill.

ALU: arithmetic and logic unit

API: application program interface

BIOS: basic input/output system

CD: compact disc

CPU: central processing unit

DVD: digital versatile disk or digital video disc

FPGA: field-programmable gate array

FPU: floating point processing unit

GPU: graphical processing unit

GUI: graphical user interface

IaaS or IAAS: infrastructure-as-a-service

ID: identification or identity

LAN: local area network

OS: operating system

PaaS or PAAS: platform-as-a-service

RAM: random access memory

ROM: read only memory

SIEM: security information and event management; also refers to toolswhich provide security information and event management

TPU: tensor processing unit

UEFI: Unified Extensible Firmware Interface

WAN: wide area network

Some Additional Terminology

Reference is made herein to exemplary embodiments such as thoseillustrated in the drawings, and specific language is used herein todescribe the same. But alterations and further modifications of thefeatures illustrated herein, and additional technical applications ofthe abstract principles illustrated by particular embodiments herein,which would occur to one skilled in the relevant art(s) and havingpossession of this disclosure, should be considered within the scope ofthe claims.

The meaning of terms is clarified in this disclosure, so the claimsshould be read with careful attention to these clarifications. Specificexamples are given, but those of skill in the relevant art(s) willunderstand that other examples may also fall within the meaning of theterms used, and within the scope of one or more claims. Terms do notnecessarily have the same meaning here that they have in general usage(particularly in non-technical usage), or in the usage of a particularindustry, or in a particular dictionary or set of dictionaries.Reference numerals may be used with various phrasings, to help show thebreadth of a term. Omission of a reference numeral from a given piece oftext does not necessarily mean that the content of a Figure is not beingdiscussed by the text. The inventors assert and exercise the right tospecific and chosen lexicography. Quoted terms are being definedexplicitly, but a term may also be defined implicitly without usingquotation marks. Terms may be defined, either explicitly or implicitly,here in the Detailed Description and/or elsewhere in the applicationfile.

A “computer system” (a.k.a. “computing system”) may include, forexample, one or more servers, motherboards, processing nodes, laptops,tablets, personal computers (portable or not), personal digitalassistants, smartphones, smartwatches, smartbands, cell or mobilephones, other mobile devices having at least a processor and a memory,video game systems, augmented reality systems, holographic projectionsystems, televisions, wearable computing systems, and/or other device(s)providing one or more processors controlled at least in part byinstructions. The instructions may be in the form of firmware or othersoftware in memory and/or specialized circuitry.

A “multithreaded” computer system is a computer system which supportsmultiple execution threads. The term “thread” should be understood toinclude code capable of or subject to scheduling, and possibly tosynchronization. A thread may also be known outside this disclosure byanother name, such as “task,” “process,” or “coroutine,” for example.However, a distinction is made herein between threads and processes, inthat a thread defines an execution path inside a process. Also, threadsof a process share a given address space, whereas different processeshave different respective address spaces. The threads of a process mayrun in parallel, in sequence, or in a combination of parallel executionand sequential execution (e.g., time-sliced).

A “processor” is a thread-processing unit, such as a core in asimultaneous multithreading implementation. A processor includeshardware. A given chip may hold one or more processors. Processors maybe general purpose, or they may be tailored for specific uses such asvector processing, graphics processing, signal processing,floating-point arithmetic processing, encryption, I/O processing,machine learning, and so on.

“Kernels” include operating systems, hypervisors, virtual machines, BIOSor UEFI code, and similar hardware interface software.

“Code” means processor instructions, data (which includes constants,variables, and data structures), or both instructions and data. “Code”and “software” are used interchangeably herein. Executable code,interpreted code, and firmware are some examples of code.

“Program” is used broadly herein, to include applications, kernels,drivers, interrupt handlers, firmware, state machines, libraries, andother code written by programmers (who are also referred to asdevelopers) and/or automatically generated.

A “routine” is a callable piece of code which normally returns controlto an instruction just after the point in a program execution at whichthe routine was called. Depending on the terminology used, a distinctionis sometimes made elsewhere between a “function” and a “procedure”: afunction normally returns a value, while a procedure does not. As usedherein, “routine” includes both functions and procedures. A routine mayhave code that returns a value (e.g., sin(x)) or it may simply returnwithout also providing a value (e.g., void functions).

“Service” means a consumable program offering, in a cloud computingenvironment or other network or computing system environment, whichprovides resources to multiple programs or provides resource access tomultiple programs, or does both.

“Cloud” means pooled resources for computing, storage, and networkingwhich are elastically available for measured on-demand service. A cloudmay be private, public, community, or a hybrid, and cloud services maybe offered in the form of infrastructure as a service (IaaS), platformas a service (PaaS), software as a service (SaaS), or another service.Unless stated otherwise, any discussion of reading from a file orwriting to a file includes reading/writing a local file orreading/writing over a network, which may be a cloud network or othernetwork, or doing both (local and networked read/write). A cloud mayalso be referred to as a “cloud environment” or a “cloud computingenvironment”.

“Access” to a computational resource includes use of a permission orother capability to read, modify, write, execute, move, delete, create,or otherwise utilize the resource. Attempted access may be explicitlydistinguished from actual access, but “access” without the “attempted”qualifier includes both attempted access and access actually performedor provided.

As used herein, “include” allows additional elements (i.e., includesmeans comprises) unless otherwise stated.

“Optimize” means to improve, not necessarily to perfect. For example, itmay be possible to make further improvements in a program or analgorithm which has been optimized.

“Process” is sometimes used herein as a term of the computing sciencearts, and in that technical sense encompasses computational resourceusers, which may also include or be referred to as coroutines, threads,tasks, interrupt handlers, application processes, kernel processes,procedures, or object methods, for example. As a practical matter, a“process” is the computational entity identified by system utilitiessuch as Windows® Task Manager, Linux® ps, or similar utilities in otheroperating system environments (marks of Microsoft Corporation, LinusTorvalds, respectively). “Process” is also used herein as a patent lawterm of art, e.g., in describing a process claim as opposed to a systemclaim or an article of manufacture (configured storage medium) claim.Similarly, “method” is used herein at times as a technical term in thecomputing science arts (a kind of “routine”) and also as a patent lawterm of art (a “process”). “Process” and “method” in the patent lawsense are used interchangeably herein. Those of skill will understandwhich meaning is intended in a particular instance, and will alsounderstand that a given claimed process or method (in the patent lawsense) may sometimes be implemented using one or more processes ormethods (in the computing science sense).

“Automatically” means by use of automation (e.g., general purposecomputing hardware configured by software for specific operations andtechnical effects discussed herein), as opposed to without automation.In particular, steps performed “automatically” are not performed by handon paper or in a person's mind, although they may be initiated by ahuman person or guided interactively by a human person. Automatic stepsare performed with a machine in order to obtain one or more technicaleffects that would not be realized without the technical interactionsthus provided. Steps performed automatically are presumed to include atleast one operation performed proactively.

One of skill understands that technical effects are the presumptivepurpose of a technical embodiment. The mere fact that calculation isinvolved in an embodiment, for example, and that some calculations canalso be performed without technical components (e.g., by paper andpencil, or even as mental steps) does not remove the presence of thetechnical effects or alter the concrete and technical nature of theembodiment, particularly in real-world embodiment implementations. Editautomation operations such as obtaining 1302 a provisional selection214, gathering 1436 edit context information 212, submitting 1304 editcontext information 212 to a suggestion generator 216, generating 1434suggestions 218, 304, altering 1410 document text 208, and many otheroperations discussed herein, are understood to be inherently digital. Ahuman mind cannot interface directly with a CPU or other processor, orwith RAM or other digital storage, to read and write the necessary datato perform the edit automation steps taught herein. This would all bewell understood by persons of skill in the art in view of the presentdisclosure.

“Computationally” likewise means a computing device (processor plusmemory, at least) is being used, and excludes obtaining a result by merehuman thought or mere human action alone. For example, doing arithmeticwith a paper and pencil is not doing arithmetic computationally asunderstood herein. Computational results are faster, broader, deeper,more accurate, more consistent, more comprehensive, and/or otherwiseprovide technical effects that are beyond the scope of human performancealone. “Computational steps” are steps performed computationally.Neither “automatically” nor “computationally” necessarily means“immediately”. “Computationally” and “automatically” are usedinterchangeably herein.

“Proactively” means without a direct request from a user. Indeed, a usermay not even realize that a proactive step by an embodiment was possibleuntil a result of the step has been presented to the user. Except asotherwise stated, any computational and/or automatic step describedherein may also be done proactively.

Throughout this document, use of the optional plural “(s)”, “(es)”, or“(ies)” means that one or more of the indicated features is present. Forexample, “processor(s)” means “one or more processors” or equivalently“at least one processor”.

For the purposes of United States law and practice, use of the word“step” herein, in the claims or elsewhere, is not intended to invokemeans-plus-function, step-plus-function, or 35. United State CodeSection 112. Sixth Paragraph/Section 112(f) claim interpretation. Anypresumption to that effect is hereby explicitly rebutted.

For the purposes of United States law and practice, the claims are notintended to invoke means-plus-function interpretation unless they usethe phrase “means for”. Claim language intended to be interpreted asmeans-plus-function language, if any, will expressly recite thatintention by using the phrase “means for”. When means-plus-functioninterpretation applies, whether by use of “means for” and/or by acourt's legal construction of claim language, the means recited in thespecification for a given noun or a given verb should be understood tobe linked to the claim language and linked together herein by virtue ofany of the following: appearance within the same block in a blockdiagram of the figures, denotation by the same or a similar name,denotation by the same reference numeral, a functional relationshipdepicted in any of the figures, a functional relationship noted in thepresent disclosure's text. For example, if a claim limitation recited a“zac widget” and that claim limitation became subject tomeans-plus-function interpretation, then at a minimum all structuresidentified anywhere in the specification in any figure block, paragraph,or example mentioning “zac widget”, or tied together by any referencenumeral assigned to a zac widget, or disclosed as having a functionalrelationship with the structure or operation of a zac widget, would bedeemed part of the structures identified in the application for zacwidgets and would help define the set of equivalents for zac widgetstructures.

One of skill will recognize that this innovation disclosure discussesvarious data values and data structures, and recognize that such itemsreside in a memory (RAM, disk, etc.), thereby configuring the memory.One of skill will also recognize that this innovation disclosurediscusses various algorithmic steps which are to be embodied inexecutable code in a given implementation, and that such code alsoresides in memory, and that it effectively configures any generalpurpose processor which executes it, thereby transforming it from ageneral purpose processor to a special-purpose processor which isfunctionally special-purpose hardware.

Accordingly, one of skill would not make the mistake of treating asnon-overlapping items (a) a memory recited in a claim, and (b) a datastructure or data value or code recited in the claim. Data structuresand data values and code are understood to reside in memory, even when aclaim does not explicitly recite that residency for each and every datastructure or data value or piece of code mentioned. Accordingly,explicit recitals of such residency are not required. However, they arealso not prohibited, and one or two select recitals may be present foremphasis, without thereby excluding all the other data values and datastructures and code from residency. Likewise, code functionality recitedin a claim is understood to configure a processor, regardless of whetherthat configuring quality is explicitly recited in the claim.

Throughout this document, unless expressly stated otherwise anyreference to a step in a process presumes that the step may be performeddirectly by a party of interest and/or performed indirectly by the partythrough intervening mechanisms and/or intervening entities, and stilllie within the scope of the step. That is, direct performance of thestep by the party of interest is not required unless direct performanceis an expressly stated requirement. For example, a step involving actionby a party of interest such as accepting, acquiring, altering,committing, designating, detecting, displaying, editing, filtering,gathering, generating, getting, hovering, indicating, inserting,interleaving, modifying, obtaining, producing, receiving, removing,submitting (and accepts, accepted, acquires, acquired, etc.) with regardto a destination or other subject may involve intervening action such asthe foregoing or forwarding, copying, uploading, downloading, encoding,decoding, compressing, decompressing, encrypting, decrypting,authenticating, invoking, and so on by some other party, including anyaction recited in this document, yet still be understood as beingperformed directly by the party of interest.

Whenever reference is made to data or instructions, it is understoodthat these items configure a computer-readable memory and/orcomputer-readable storage medium, thereby transforming it to aparticular article, as opposed to simply existing on paper, in aperson's mind, or as a mere signal being propagated on a wire, forexample. For the purposes of patent protection in the United States, amemory or other computer-readable storage medium is not a propagatingsignal or a carrier wave or mere energy outside the scope of patentablesubject matter under United States Patent and Trademark Office (USPTO)interpretation of the In re Nuijten case. No claim covers a signal perse or mere energy in the United States, and any claim interpretationthat asserts otherwise in view of the present disclosure is unreasonableon its face. Unless expressly stated otherwise in a claim grantedoutside the United States, a claim does not cover a signal per se ormere energy.

Moreover, notwithstanding anything apparently to the contrary elsewhereherein, a clear distinction is to be understood between (a) computerreadable storage media and computer readable memory, on the one hand,and (b) transmission media, also referred to as signal media, on theother hand. A transmission medium is a propagating signal or a carrierwave computer readable medium. By contrast, computer readable storagemedia and computer readable memory are not propagating signal or carrierwave computer readable media. Unless expressly stated otherwise in theclaim, “computer readable medium” means a computer readable storagemedium, not a propagating signal per se and not mere energy.

An “embodiment” herein is an example. The term “embodiment” is notinterchangeable with “the invention”. Embodiments may freely share orborrow aspects to create other embodiments (provided the result isoperable), even if a resulting combination of aspects is not explicitlydescribed per se herein. Requiring each and every permitted combinationto be explicitly and individually described is unnecessary for one ofskill in the art, and would be contrary to policies which recognize thatpatent specifications are written for readers who are skilled in theart. Formal combinatorial calculations and informal common intuitionregarding the number of possible combinations arising from even a smallnumber of combinable features will also indicate that a large number ofaspect combinations exist for the aspects described herein. Accordingly,requiring an explicit recitation of each and every combination would becontrary to policies calling for patent specifications to be concise andfor readers to be knowledgeable in the technical fields concerned.

LIST OF REFERENCE NUMERALS

The following list is provided for convenience and in support of thedrawing figures and as part of the text of the specification, whichdescribe innovations by reference to multiple items. Items not listedhere may nonetheless be part of a given embodiment. For betterlegibility of the text, a given reference number is recited near some,but not all, recitations of the referenced item in the text. The samereference number may be used with reference to different examples ordifferent instances of a given item. The list of reference numerals is:

-   -   100 operating environment, also referred to as computing        environment    -   102 computer system, also referred to as a “computational        system” or “computing system”, and when in a network may be        referred to as a “node”    -   104 users, e.g., user of an enhanced system 202    -   106 peripherals    -   108 network generally, including, e.g., LANs, WANs,        software-defined networks, clouds, and other wired or wireless        networks    -   110 processor    -   112 computer-readable storage medium, e.g., RAM, hard disks    -   114 removable configured computer-readable storage medium    -   116 instructions executable with processor; may be on removable        storage media or in other memory (volatile or nonvolatile or        both)    -   118 data    -   120 kernel(s), e.g., operating system(s), BIOS, UEFI, device        drivers    -   122 tools, e.g., anti-virus software, firewalls, packet sniffer        software, intrusion detection systems, intrusion prevention        systems, other cybersecurity tools, debuggers, profilers,        compilers, interpreters, decompilers, assemblers, disassemblers,        source code editors, autocompletion software, simulators,        fuzzers, repository access tools, version control tools,        optimizers, collaboration tools, other software development        tools and tool suites (including, e.g., integrated development        environments), hardware development tools and tool suites,        diagnostics, and so on    -   124 applications, e.g., word processors, web browsers,        spreadsheets, games, email tools, commands    -   126 display screens, also referred to as “displays”    -   128 computing hardware not otherwise associated with a reference        number 106, 108, 110, 112, 114    -   202 system 102 enhanced with edit automation functionality,        e.g., functionality to perform any operation or operational        sequence shown in any of the Figures and first described herein    -   204 editor software, e.g., a tool 122 or application 124        enhanced with edit automation functionality    -   206 digital document, e.g., word processor document, spreadsheet        document, source code document, or other document in digital        (computer-readable and software-editable) format; may include        text, graphics, sound, etc.    -   208 text in a document, as opposed for example to suggestion        text 218, 304 or metainformation text 1212    -   210 user interface generally; part of an editor 204; software    -   212 digital edit context information, e.g., one or more of: some        or all of the document text 208, current location of the        insertion point 502, current hover target 1202 or corresponding        targeted portion 1204 or both, current provisional selection 214    -   214 provisional selection, e.g., text which is a focus of        attention, e.g., due to being hovered over or due to being        highlighted etc. in a completion list; also refers to operation        of provisionally selecting an item    -   216 suggestion generation model, also referred to as “suggestion        generator”; computational    -   218 suggestion of text for altering document text 208; may also        be referred to as a “recommendation” or a “prediction”; a        suggestion 218 may be driven by provisional selection or        not—context will indicate whether provisional selection is        driving the suggestion, e.g., if the suggestion comes from a        generator 216 or is generated 1434 then it is presumably driven        by provisional selection, and in most but not all cases (an        exception being inclusion of an generated 1434 suggestion        displayed in a completion list) the entries 304 of a completion        list are not driven by provisional selection    -   220 machine learning model; computational; may be part of a        generator 216    -   302 completion list; digital data structure; entries 304 may be        sorted, e.g., by confidence score or other heuristics    -   304 entry in a completion list; digital data structure (e.g., a        string)    -   306 source code generally; digital    -   308 digital text other than source code    -   310 property, in the software development sense, e.g., a source        code token, subject to syntax and semantics of a programming        language    -   312 reserved word in a programming language; part of source code    -   314 data variable, also referred to simply as a “variable”;        meant in the software development sense, e.g., a source code        token or set of tokens, subject to syntax and semantics of a        programming language    -   316 software data structure, e.g., a source code token or set of        tokens, subject to syntax and semantics of a programming        language    -   318 identifier, in the software development sense, e.g., a        source code token, subject to syntax and semantics of a        programming language    -   320 application program interface; digital    -   322 method, in the software development sense, e.g., a source        code token, subject to syntax and semantics of a programming        language    -   324 argument of a method, also referred to as a “parameter”;        meant in the software development sense, e.g., a source code        token or set of tokens, subject to syntax and semantics of a        programming language    -   326 overloaded method, in the software development sense, e.g.,        a source code token, subject to syntax and semantics of a        programming language    -   328 filtered list of completion entries 304    -   330 part of a suggestion that is accepted for insertion into        document    -   332 part of a suggestion generally    -   334 span of a suggestion in number of lines 1232; also refers to        act of spanning one or more lines    -   336 origin of a suggestion; some possibilities include a        provisional-selection-driven generator 216, and a completion        list entry creator that is not provisional-selection-driven    -   400 stylized user interface which illustrates user interfaces        210    -   502 insertion point, also referred to as “text insertion point”;        a location in a document in a user interface at which text will        be inserted in response to one or more of the following: typing,        pasting, accepting a suggestion    -   1202 hover target, e.g., screen or display coordinate indicated        by a cursor; digital    -   1204 hover target portion of text (e.g., document text 208 of        metainformation text 1212) near a hover target; digital    -   1206 cursor, e.g., visual position indicator in a user interface    -   1208 user interface gesture, e.g., mouse click, key press;        digital; gestures to commit 1310 or accept a suggestion are        called “commit gestures”    -   1210 metainformation    -   1212 metainformation expressed as digital text    -   1214 token, in the software development sense    -   1216 digital description of a token 1214, e.g., interface        expected or behavior provided during execution    -   1218 text of a document located between two parts of a        suggestion or between two related suggestions; suggestions are        “related”, e.g., if they can both be accepted using a single        commit gesture or using two consecutive commit gestures        (possibly the same gesture twice), or if they are displayed 1422        together    -   1220 visual indicator of text status in a user interface 210    -   1222 grey text, e.g., digital text which is lighter, thinner,        smaller, or otherwise less visually prominent than nearby text;        despite the name, grey text is not necessarily grey in color    -   1224 highlighted text, e.g., digital text which is shown in a        different color or using a different background color than        nearby text    -   1226 bold text, italic text, or underlined text; digital in each        case    -   1228 colored text, e.g., digital text which is shown in a        different color than nearby text    -   1230 text status, e.g., part of a document as opposed to part of        a suggestion and hence not part of the document (at least not        yet); text status may also be selected (provisionally or        otherwise), or not selected; in some embodiments text status for        a suggestion includes whether the suggestion was        provisional-selection-driven or not    -   1232 line of text in a user interface; line scope is determined,        e.g., by line wrapping or carriage return/line feed/end of file        values    -   1234 set of available provisional items; digital data structure    -   1236 provisional items, e.g., suggestion entries in a completion        list which may or may not currently also be displayed    -   1238 user input generally; any gesture or data sent to a user        interface by action of a user 104    -   1240 column    -   1242 grid, e.g., array    -   1244 scrollable list; may be scrollable vertically,        horizontally, or both    -   1300 flowchart; 1300 also refers to edit automation methods        illustrated by or consistent with the FIG. 13 flowchart    -   1302 computationally obtain a current provisional selection 214,        e.g., by tracking user interface routines, using callbacks to        user interface routines, or reading user interface data        structures    -   1304 computationally submit edit context information to a        suggestion generator 216, e.g., as one or more digital data        arguments in one or more calls to a generator API    -   1306 computationally get a suggestion 218 from a generator 216,        e.g., as one or more digital data returns from one or more calls        to a generator API    -   1308 computationally display a suggestion 218 in a user        interface, e.g., by calling user interface routines, or writing        user interface data structures    -   1310 computationally commit a suggestion, e.g., by calling user        interface or file system routines, or writing document text 208        data structures    -   1400 flowchart; 1400 also refers to edit automation methods        illustrated by or consistent with the FIG. 14 flowchart (which        incorporates the steps of FIGS. 4 through 11 and 13 )    -   1402 computationally display text in a user interface, e.g., by        calling user interface routines, or writing user interface data        structures; displayed text may be, e.g., document text 208,        metainformation text 1212, suggestion text 218, completion list        entry text 304, editor status text such as the name of the file        being edited or error messages, or navigational text such as        menus or text reminding a user which gestures will have which        effects; performed, e.g., by calling user interface routines or        writing user interface data structures    -   1404 computationally filter a completion item list    -   1406 computationally receive a gesture indicating acceptance of        a suggestion or part thereof; may also be referred to as        “accepting” the suggestion    -   1408 computationally designate a suggestion as accepted in part        or as a whole    -   1410 computationally alter document text 208, e.g., by        insertion, deletion, or changing an order in which parts of the        document occur    -   1412 computationally insert part or all of a suggested text into        a document    -   1414 computationally display available provisional items, e.g.,        in a completion list or in a document or as metainformation        text; this is an example of displaying 1402 generally    -   1416 computationally display two or more suggestion parts or two        or more related suggestions with intervening document text; this        is an example of displaying 1402 generally    -   1418 computationally interleave two or more suggestion parts or        two or more related suggestions with intervening document text    -   1420 computationally acquire metainformation text    -   1422 computationally display two or more suggestion parts or two        or more related suggestions at the same time; this is an example        of displaying 1402 generally; the respective displays need not        be completely simultaneous—an overlap in the time periods of the        respective displays also qualifies as displaying them “at the        same time”    -   1424 computationally display a provisional-selection-driven        suggestion in a completion list; this is an example of        displaying 1402 generally    -   1426 computationally modify text of a        provisional-selection-driven suggestion without previously        committing it    -   1428 computationally commit text of a        provisional-selection-driven suggestion after previously        modifying it in response to user input    -   1430 computationally detect that a cursor is hovering    -   1432 cursor hovering in a user interface    -   1434 computationally generate a provisional-selection-driven        suggestion    -   1436 computationally gather edit context information    -   1438 computationally remove a suggestion from a display 126;        although this operation might be called “undisplaying”, for        present purposes it is an example of displaying 1402 because it        changes what is visible on the display    -   1440 computationally get a suggestion from an origin that is not        necessarily provisional-selection-driven    -   1442 any step discussed in the present disclosure that has not        been assigned some other reference numeral    -   1444 prioritize a suggestion relative to one or more other        suggestions 218; computational; may be done, e.g., by applying        one or more heuristics such as favoring source code suggestions        that compile or successfully pass lint or other code analyzer        scrutiny, limiting the number of identifiers in a suggestion,        particularly identifiers which have associated metainformation        text, setting a minimum length or a maximum length or both for        suggestion string length, or basing priority on a confidence        score for the suggestion generated by the model 216

CONCLUSION

In short, the teachings herein provide a variety of edit automationfunctionalities which operate in enhanced systems 202. Edit automationenhancements may be implemented in source code 306 editors 204 and othertext editors 204. Provisional selections 214 that indicate userintentions are submitted 1304 to a suggestion generator 216 with otheredit context information 212, to improve the quality of generated 1434text suggestions 218 and reduce the cognitive load on users 104. Aprovisional selection 214 may include a highlighted 1224 completion list302 entry 304, or document 206 text 208 targeted 1202 by a hovering 1432cursor 1206, or metainformation text 1212 targeted 1202 by the hoveringcursor 1206, for example. An inline grey text 1222 suggestion 218 driven1434 by provisional selection 214 may be displayed 1308 simultaneously1422 with completion list 302 suggestions 304 that were created withoutregard to provisional selection 214. Suggestions 218 driven 1434 byprovisional selection 214 may be interleaved 1418 with existing documenttext 208. Suggestions 218 may be prioritized 1444 for display (or toavoid display 1308) based on their confidence score or using otherheuristics. Suggestions 218 may be accepted 1406 fully in one gesture1208, or be accepted stagewise (in parts 330). Suggestions 218 may beedited 1426 by a user before being accepted 1406, driving 1304 furthersuggestion 218 refinement 1434. Multiple suggestions 218, 304 may bedisplayed 1308, 1402, 1416, 1424 simultaneously 1422, reducing pressureon a machine learning model 220 or other suggestion generator 216.

Embodiments are understood to also themselves include or benefit fromtested and appropriate security controls and privacy controls such asthe General Data Protection Regulation (GDPR), e.g., it is understoodthat appropriate measures should be taken to help prevent misuse ofcomputing systems through the injection or activation of malware intoSIEM software. Use of the tools and techniques taught herein iscompatible with use of such controls.

Although Microsoft technology is used in some motivating examples, theteachings herein are not limited to use in technology supplied oradministered by Microsoft. Under a suitable license, for example, thepresent teachings could be embodied in software or services provided byother cloud service providers.

Although particular embodiments are expressly illustrated and describedherein as processes, as configured storage media, or as systems, it willbe appreciated that discussion of one type of embodiment also generallyextends to other embodiment types. For instance, the descriptions ofprocesses in connection with FIGS. 4 through 11, 13, and 14 also helpdescribe configured storage media, and help describe the technicaleffects and operation of systems and manufactures like those discussedin connection with other Figures. It does not follow that limitationsfrom one embodiment are necessarily read into another. In particular,processes are not necessarily limited to the data structures andarrangements presented while discussing systems or manufactures such asconfigured memories.

Those of skill will understand that implementation details may pertainto specific code, such as specific thresholds, comparisons, specifickinds of runtimes or programming languages or architectures, specificscripts or other tasks, and specific computing environments, and thusneed not appear in every embodiment. Those of skill will also understandthat program identifiers and some other terminology used in discussingdetails are implementation-specific and thus need not pertain to everyembodiment. Nonetheless, although they are not necessarily required tobe present here, such details may help some readers by providing contextand/or may illustrate a few of the many possible implementations of thetechnology discussed herein.

With due attention to the items provided herein, including technicalprocesses, technical effects, technical mechanisms, and technicaldetails which are illustrative but not comprehensive of all claimed orclaimable embodiments, one of skill will understand that the presentdisclosure and the embodiments described herein are not directed tosubject matter outside the technical arts, or to any idea of itself suchas a principal or original cause or motive, or to a mere result per se,or to a mental process or mental steps, or to a business method orprevalent economic practice, or to a mere method of organizing humanactivities, or to a law of nature per se, or to a naturally occurringthing or process, or to a living thing or part of a living thing, or toa mathematical formula per se, or to isolated software per se, or to amerely conventional computer, or to anything wholly imperceptible or anyabstract idea per se, or to insignificant post-solution activities, orto any method implemented entirely on an unspecified apparatus, or toany method that fails to produce results that are useful and concrete,or to any preemption of all fields of usage, or to any other subjectmatter which is ineligible for patent protection under the laws of thejurisdiction in which such protection is sought or is being licensed orenforced.

Reference herein to an embodiment having some feature X and referenceelsewhere herein to an embodiment having some feature Y does not excludefrom this disclosure embodiments which have both feature X and featureY, unless such exclusion is expressly stated herein. All possiblenegative claim limitations are within the scope of this disclosure, inthe sense that any feature which is stated to be part of an embodimentmay also be expressly removed from inclusion in another embodiment, evenif that specific exclusion is not given in any example herein. The term“embodiment” is merely used herein as a more convenient form of“process, system, article of manufacture, configured computer readablestorage medium, and/or other example of the teachings herein as appliedin a manner consistent with applicable law.” Accordingly, a given“embodiment” may include any combination of features disclosed herein,provided the embodiment is consistent with at least one claim.

Not every item shown in the Figures need be present in every embodiment.Conversely, an embodiment may contain item(s) not shown expressly in theFigures. Although some possibilities are illustrated here in text anddrawings by specific examples, embodiments may depart from theseexamples. For instance, specific technical effects or technical featuresof an example may be omitted, renamed, grouped differently, repeated,instantiated in hardware and/or software differently, or be a mix ofeffects or features appearing in two or more of the examples.Functionality shown at one location may also be provided at a differentlocation in some embodiments; one of skill recognizes that functionalitymodules can be defined in various ways in a given implementation withoutnecessarily omitting desired technical effects from the collection ofinteracting modules viewed as a whole. Distinct steps may be showntogether in a single box in the Figures, due to space limitations or forconvenience, but nonetheless be separately performable, e.g., one may beperformed without the other in a given performance of a method.

Reference has been made to the figures throughout by reference numerals.Any apparent inconsistencies in the phrasing associated with a givenreference numeral, in the figures or in the text, should be understoodas simply broadening the scope of what is referenced by that numeral.Different instances of a given reference numeral may refer to differentembodiments, even though the same reference numeral is used. Similarly,a given reference numeral may be used to refer to a verb, a noun, and/orto corresponding instances of each, e.g., a processor 110 may process110 instructions by executing them.

As used herein, terms such as “a”, “an”, and “the” are inclusive of oneor more of the indicated item or step. In particular, in the claims areference to an item generally means at least one such item is presentand a reference to a step means at least one instance of the step isperformed. Similarly, “is” and other singular verb forms should beunderstood to encompass the possibility of “are” and other plural forms,when context permits, to avoid grammatical errors or misunderstandings.

Headings are for convenience only; information on a given topic may befound outside the section whose heading indicates that topic.

All claims and the abstract, as filed, are part of the specification.

To the extent any term used herein implicates or otherwise refers to anindustry standard, and to the extent that applicable law requiresidentification of a particular version of such as standard, thisdisclosure shall be understood to refer to the most recent version ofthat standard which has been published in at least draft form (finalform takes precedence if more recent) as of the earliest priority dateof the present disclosure under applicable patent law.

While exemplary embodiments have been shown in the drawings anddescribed above, it will be apparent to those of ordinary skill in theart that numerous modifications can be made without departing from theprinciples and concepts set forth in the claims, and that suchmodifications need not encompass an entire abstract concept. Althoughthe subject matter is described in language specific to structuralfeatures and/or procedural acts, it is to be understood that the subjectmatter defined in the appended claims is not necessarily limited to thespecific technical features or acts described above the claims. It isnot necessary for every means or aspect or technical effect identifiedin a given definition or example to be present or to be utilized inevery embodiment. Rather, the specific features and acts and effectsdescribed are disclosed as examples for consideration when implementingthe claims.

All changes which fall short of enveloping an entire abstract idea butcome within the meaning and range of equivalency of the claims are to beembraced within their scope to the full extent permitted by law.

What is claimed is:
 1. A computing system configured to display textsuggestions which change according to provisional selections made duringan editing session, the system comprising: a digital memory, the digitalmemory configurable to contain a document, the document includingdocument text; a processor in operable communication with the digitalmemory; a display device; an editor having a user interface which uponexecution with the processor displays at least a portion of the documenton the display device, the user interface including a text insertionpoint; wherein the editor is configured to perform edit automation stepsupon execution with the processor, including automatically (a)submitting edit context information to a suggestion generation machinelearning model, the edit context information including a provisionalselection of a completion set entry of a multi-entry completion setwhich is displayed in the user interface, (b) getting from thesuggestion generation machine learning model a completion textsuggestion which is based at least in part on the provisional selection,and (c) displaying the completion text suggestion near the textinsertion point.
 2. The system of claim 1, wherein the document textincludes source code, and the provisional selection selects at least oneof the following: a completion set entry which includes a source codemethod suggestion; a completion set entry which includes an applicationprogram interface method suggestion; a completion set entry whichincludes a source code property suggestion; a completion set entry whichincludes a source code reserved word suggestion; a completion set entrywhich includes a source code data variable suggestion; a completion setentry which includes a source code data structure suggestion; acompletion set entry which includes a source code identifier from anapplication program interface suggestion; a completion set entry whichincludes a source code method argument suggestion; or a completion setentry which includes a source code overloaded method suggestion.
 3. Thesystem of claim 1, wherein the edit automation steps include producing afiltered completion item list by filtering a set of source codecompletion items, and wherein the provisional selection includes auser-indicated entry in the filtered completion item list.
 4. The systemof claim 1, wherein the edit automation steps include detecting that acursor is hovering over a hover target portion of the document text, andwherein the provisional selection includes at least part of the hovertarget portion.
 5. The system of claim 1, wherein the edit automationsteps further comprise committing the completion text suggestion, andwherein the committing includes: receiving an acceptance of at least apart of the completion text suggestion; designating the part of thecompletion text suggestion as an accepted part; and altering thedocument text to include a copy of the accepted part.
 6. A method whichprovides updated text suggestions as provisional selections occur duringa document editing session, the method comprising: obtaining via a userinterface a first provisional selection which is a first focus ofattention in the user interface in response to an interaction receivedby the computing system in the user interface, the provisional selectioncorresponding to a completion set entry of a completion set which has aplurality of entries; getting from a suggestion generation machinelearning model a first text suggestion which is based at least in parton the first provisional selection and which includes a possible linecompletion; and displaying the first text suggestion in the userinterface.
 7. The method of claim 6, further comprising: obtaining viathe user interface a second provisional selection which is a secondfocus of attention in the user interface; getting from the suggestiongeneration machine learning model a second text suggestion which isbased at least in part on the second provisional selection; removing thefirst text suggestion from being displayed; and displaying the secondtext suggestion inline in the user interface.
 8. The method of claim 6,wherein at least one of the following conditions is satisfied: the firsttext suggestion spans more than one line of text; or the first textsuggestion includes a multi-part text suggestion having at least twoparts, and the method displays the two parts with an intervening portionof document text displayed between the two parts.
 9. The method of claim6, wherein the method integrates semantic completion with full linecompletion.
 10. The method of claim 6, further comprising: acquiringmetainformation text which includes a natural language description of atoken that is represented by at least a part of the first textsuggestion; and displaying the metainformation text while displaying thefirst text suggestion.
 11. The method of claim 7, further comprising:getting a third text suggestion from an origin which is not thesuggestion generation model; and displaying the third text suggestionwhile displaying the second text suggestion.
 12. The method of claim 6,further comprising: committing the first provisional selection uponreceiving a first instance of a commit gesture; and then committing atleast a part of the first text suggestion upon receiving a secondinstance of the commit gesture.
 13. The method of claim 6, wherein thefirst provisional selection corresponds to an item in a set of availableprovisional items, and method comprises displaying at least a portion ofthe set of available provisional items.
 14. The method of claim 6,wherein the method includes modifying the first text suggestion based onuser input, and then committing the first text suggestion as modified.15. The method of claim 6, wherein the method comprises detecting that acursor is hovering over a hover target, and wherein the firstprovisional selection corresponds to at least a part of the hovertarget.
 16. A computer-readable storage device configured with data andinstructions which upon execution by a processor cause a computingsystem to perform a method which provides updated text suggestions asprovisional selections occur during a document editing session, themethod comprising: obtaining via a user interface a first provisionalselection corresponding to a first completion set entry of a completionset which has a plurality of entries; getting from a suggestiongeneration model a first text suggestion which is based at least in parton the first provisional selection; displaying the first textsuggestion; obtaining via a user interface a second provisionalselection corresponding to a second completion set entry of thecompletion set; getting from the suggestion generation model a secondtext suggestion which is based at least in part on the secondprovisional selection; removing the first text suggestion from beingdisplayed; and displaying the second text suggestion.
 17. The storagedevice of claim 16, wherein the second text suggestion shows at leastone of: an application program interface method and a parameter of theapplication program interface method; a source code method; a sourcecode property; a source code reserved word; a source code data variable;a source code data structure; a source code identifier from anapplication program interface; a source code method argument; or asource code overloaded method.
 18. The storage device of claim 16,wherein the method includes getting at least two text suggestions fromthe suggestion generation model, and displaying the at least two textsuggestions interleaved with document text.
 19. The storage device ofclaim 16, wherein the second text suggestion is displayed as an entry inthe completion set.
 20. The storage device of claim 16, wherein theprovisional selection corresponds to an item in a set of availableprovisional items, and method comprises at least one of the following:displaying a column of available provisional items; displaying a grid ofavailable provisional items; displaying a menu of available provisionalitems; or displaying a scrollable list of available provisional items.